// 用户路由
const express = require('express');
const router = express.Router();
const User = require('../models/User');
const jwt = require('jsonwebtoken');

// 生成token的函数
const generateToken = (userId) => {
  return jwt.sign({ id: userId }, process.env.JWT_SECRET || 'your_jwt_secret', {
    expiresIn: '7d'
  });
};

/**
 * 用户登录
 * @route POST /api/users/login
 * @description 用户登录接口，通过微信openid登录
 * @access Public
 */
router.post('/login', async (req, res) => {
  try {
    const { openid, userInfo } = req.body;
    
    if (!openid) {
      return res.status(400).json({ message: '缺少openid参数' });
    }
    
    // 查找用户是否已存在
    let user = await User.findOne({ where: { openid } });
    
    if (!user) {
      // 创建新用户
      user = await User.create({
        openid,
        nickName: userInfo?.nickName,
        avatarUrl: userInfo?.avatarUrl,
        gender: userInfo?.gender
      });
    } else if (userInfo) {
      // 更新用户信息
      await user.update({
        nickName: userInfo.nickName,
        avatarUrl: userInfo.avatarUrl,
        gender: userInfo.gender
      });
    }
    
    // 生成token
    const token = generateToken(user.id);
    
    res.status(200).json({
      success: true,
      token,
      user: {
        id: user.id,
        nickName: user.nickName,
        avatarUrl: user.avatarUrl,
        isMember: user.isMember,
        memberLevel: user.memberLevel
      }
    });
  } catch (error) {
    console.error('登录失败:', error);
    res.status(500).json({ message: '服务器错误', error: error.message });
  }
});

/**
 * 获取用户信息
 * @route GET /api/users/info
 * @description 获取用户详细信息
 * @access Private
 */
router.get('/info', async (req, res) => {
  try {
    // 这里应该有token验证中间件，获取用户ID
    const userId = req.user?.id || 1; // 临时处理，实际应用中应从token中获取
    
    const user = await User.findByPk(userId);
    
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    
    res.status(200).json({
      success: true,
      user: {
        id: user.id,
        nickName: user.nickName,
        avatarUrl: user.avatarUrl,
        gender: user.gender,
        phone: user.phone,
        email: user.email,
        studentId: user.studentId,
        school: user.school,
        major: user.major,
        studyCountry: user.studyCountry,
        studyCity: user.studyCity,
        studyStartDate: user.studyStartDate,
        studyEndDate: user.studyEndDate,
        isMember: user.isMember,
        memberLevel: user.memberLevel
      }
    });
  } catch (error) {
    console.error('获取用户信息失败:', error);
    res.status(500).json({ message: '服务器错误', error: error.message });
  }
});

/**
 * 更新用户信息
 * @route PUT /api/users/update
 * @description 更新用户详细信息
 * @access Private
 */
router.put('/update', async (req, res) => {
  try {
    const userId = req.user?.id || 1; // 临时处理，实际应用中应从token中获取
    const updateData = req.body;
    
    const user = await User.findByPk(userId);
    
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    
    await user.update(updateData);
    
    res.status(200).json({
      success: true,
      message: '用户信息更新成功',
      user: {
        id: user.id,
        nickName: user.nickName,
        phone: user.phone,
        email: user.email,
        studentId: user.studentId,
        school: user.school,
        major: user.major,
        studyCountry: user.studyCountry,
        studyCity: user.studyCity
      }
    });
  } catch (error) {
    console.error('更新用户信息失败:', error);
    res.status(500).json({ message: '服务器错误', error: error.message });
  }
});

/**
 * 绑定手机号
 * @route POST /api/users/bind-phone
 * @description 用户绑定手机号
 * @access Private
 */
router.post('/bind-phone', async (req, res) => {
  try {
    const userId = req.user?.id || 1; // 临时处理，实际应用中应从token中获取
    const { phone } = req.body;
    
    if (!phone) {
      return res.status(400).json({ message: '请输入手机号' });
    }
    
    const user = await User.findByPk(userId);
    
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    
    await user.update({ phone });
    
    res.status(200).json({ success: true, message: '手机号绑定成功' });
  } catch (error) {
    console.error('绑定手机号失败:', error);
    res.status(500).json({ message: '服务器错误', error: error.message });
  }
});

/**
 * 成为会员
 * @route POST /api/users/become-member
 * @description 用户申请成为会员
 * @access Private
 */
router.post('/become-member', async (req, res) => {
  try {
    const userId = req.user?.id || 1; // 临时处理，实际应用中应从token中获取
    
    const user = await User.findByPk(userId);
    
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    
    await user.update({ isMember: true, memberLevel: '普通会员' });
    
    res.status(200).json({ success: true, message: '已成功成为会员' });
  } catch (error) {
    console.error('成为会员失败:', error);
    res.status(500).json({ message: '服务器错误', error: error.message });
  }
});

module.exports = router;